library(dplyr)
library(car)
library(rstatix)
library(emmeans)
library(ggplot2)
library(knitr)
library(kableExtra)
library(htmltools)
1. Vá ao Repositório de Dados Eleitorais do TSE. Na página “Resultados” e no ano 2012, faça o download do arquivo “Votação nominal por município e zona” e descompacte-o.
2. Abre o arquivo para São Paulo (votacao_candidato_munzona_2012_SP.txt) em R com os nomes de colunas e o encoding corretos de acordo com a seção relevante de leaime.pdf.
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v tibble 3.1.6 v purrr 0.3.4
## v tidyr 1.1.4 v stringr 1.4.0
## v readr 2.1.1 v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x rstatix::filter() masks dplyr::filter(), stats::filter()
## x kableExtra::group_rows() masks dplyr::group_rows()
## x dplyr::lag() masks stats::lag()
## x car::recode() masks dplyr::recode()
## x purrr::some() masks car::some()
data <- read_delim("C:/Users/aluga.com/Documents/portifolio/atividade_1/votacao_candidato_munzona_2012_SP.txt",
delim=";",
locale=locale(encoding="latin1"),
col_names=c("DATA_GERACAO","HORA_GERACAO","ANO_ELEICAO","NUM_TURNO",
"DESCRICAO_ELEICAO","SIGLA_UF","SIGLA_UE",
"CODIGO_MUNICIPIO","NOME_MUNICIPIO","NUMERO_ZONA",
"CODIGO_CARGO","NUMERO_CAND","SQ_CANDIDATO",
"NOME_CANDIDATO","NOME_URNA_CANDIDATO","DESCRICAO_CARGO",
"COD_SIT_CAND_SUPERIOR","DESC_SIT_CAND_SUPERIOR",
"CODIGO_SIT_CANDIDATO","DESC_SIT_CANDIDATO",
"CODIGO_SIT_CAND_TOT","DESC_SIT_CAND_TOT",
"NUMERO_PARTIDO","SIGLA_PARTIDO","NOME_PARTIDO",
"SEQUENCIAL_LEGENDA","NOME_COLIGACAO",
"COMPOSICAO_LEGENDA","TOTAL_VOTOS"))
## Rows: 182932 Columns: 29
## -- Column specification --------------------------------------------------------
## Delimiter: ";"
## chr (14): DATA_GERACAO, DESCRICAO_ELEICAO, SIGLA_UF, NOME_MUNICIPIO, NOME_C...
## dbl (14): ANO_ELEICAO, NUM_TURNO, SIGLA_UE, CODIGO_MUNICIPIO, NUMERO_ZONA, ...
## time (1): HORA_GERACAO
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
3. Lendo o leaime.pdf e observando as variáveis no banco de dados, o que representa uma observação (uma linha)? Ou seja, qual a unidade de análise aqui?
Cada linhha é o resultado da eleição para um candidato em uma zona eleitoral específico em um turno na eleição de 2012 em São Paulo.
4. Leia até o final as instruções e identifique quais variáveis serão necessárias para o resto do exercício. Tire do seu banco de dados as variáveis desnecesárias.
data <- data %>%
select(NUM_TURNO, NOME_CANDIDATO, DESC_SIT_CAND_TOT, NOME_URNA_CANDIDATO, SQ_CANDIDATO,
CODIGO_MUNICIPIO, NOME_MUNICIPIO, NUMERO_ZONA, SIGLA_PARTIDO,
TOTAL_VOTOS, DESCRICAO_CARGO, NUMERO_CAND, NUMERO_PARTIDO)
5. Selecione apenas as linhas que contém resultados eleitorais para o primeiro turno da eleição do prefeito(a).
data_prefeito_turno_1 <- data %>% filter(DESCRICAO_CARGO=="PREFEITO" & NUM_TURNO==1)
data_prefeito_turno_1
6. Note que candidatos podem aparecer mais de uma vez na tabela em Q5 (porque existem múltiplas zonas em cada município). Usando identificadores únicos, identifique os candidatos distintos para o primeiro turno do prefeito. Explique no seu relatório quantos candidatos concorrem para prefeito no primeiro turno em 2012.
cands_prefeito_turno_1 <- data_prefeito_turno_1 %>% distinct(SQ_CANDIDATO)
num_cands_prefeito_turno_1 <- nrow(cands_prefeito_turno_1)
O número de candidatos que concorrem para prefeito no primeiro turno em 2012 em São Paulo é `r num_cands_prefeito_turno_1`.
O número de candidatos que concorrem para prefeito no primeiro turno em 2012 em São Paulo é 2035.
7. No banco de dados de prefeitos no primeiro turno gerado na questão anterior, renomeie a variável com nome pouco claro DESC_SIT_CAND_TOT para RESULTADO
data_prefeito_turno_1 <- data_prefeito_turno_1 %>%
rename(RESULTADO=DESC_SIT_CAND_TOT)
8. No banco de dados de prefeitos no primeiro turno gerado na questão anterior, filtrar os dados para os candidatos que se candidataram com Nome de Urna ígual ao seu Nome completo, e identifique os candidatos únicos de novo. No seu relatório, explique qual porcentagem de todos os candidatos para prefeito no primeiro turno isso representa.
cands_prefeito_turno_1_nome_igual <- data_prefeito_turno_1 %>%
filter(NOME_CANDIDATO==NOME_URNA_CANDIDATO) %>%
distinct(SQ_CANDIDATO)
Pct_nome_igual <- 100*(nrow(cands_prefeito_turno_1_nome_igual)/nrow(cands_prefeito_turno_1))
O porcentagem de candidatos para prefeito no primeiro turno com nome completo ígual ao nome de urna é `r round(Pct_nome_igual,2)`.
O porcentagem de candidatos para prefeito no primeiro turno com nome completo ígual ao nome de urna é 5.7%.
9. Quantos dos candidatos identificados em Q8 foram eleitos no primeiro turno?
num_cands_nome_igual_eleito <- data_prefeito_turno_1 %>%
filter(NOME_CANDIDATO==NOME_URNA_CANDIDATO) %>%
filter(RESULTADO=="ELEITO") %>%
distinct(SQ_CANDIDATO) %>%
nrow()
Dos `r nrow(cands_prefeito_turno_1_nome_igual)` candidatos com nome completo ígual ao nome de urna, `r num_cands_nome_igual_eleito` foram eleitos.
Dos 116 candidatos com nome completo ígual ao nome de urna, 39 foram eleitos.
10. Voltando para os dados de todos os candidatos no primeiro turno, vamos focar a nossa análise no município de São Paulo (código do TSE 71072). Ordene os dados por número de votos e identifique qual candidato recebeu o maior número de votos em qualquer zona da cidade.
data_prefeito_turno_1 %>% filter(CODIGO_MUNICIPIO==71072) %>%
arrange(-TOTAL_VOTOS) %>%
top_n(1, TOTAL_VOTOS)
O candidato para prefeito com a maior votação em uma zona no município de São Paulo no primeiro turno de 2012 é José Serra.
11. Usando a sua própria classificação, crie uma nova variável que descreve a ideologia de cada partido no banco de dados do município de São Paulo nas três categorias ‘Esquerda’, ‘Direita’ e ‘Outro’.
data_prefeito_turno_1 <- data_prefeito_turno_1 %>%
filter(CODIGO_MUNICIPIO==71072) %>%
mutate(Ideologia=case_when(SIGLA_PARTIDO %in% c("PDT","PV","PSOL","PTN",
"PT","PPS","PTB","PSB",
"PC do B","PT do B","PSTU",
"PCB","PPL","PCO","SD")~"Esquerda",
SIGLA_PARTIDO %in% c("PSD","PSDB","PRB","PRP",
"PMDB","DEM","PSC","PP",
"PRTB","PHS","PSL","PTC")~"Direita",
SIGLA_PARTIDO %in% c("PR","PMN","PT do B","PSDC")~"Outro"))
12. Crie uma variável que indica se o candidato no município de São Paulo recebeu mais de 10.000 votos na zona.
data_prefeito_turno_1 <- data_prefeito_turno_1 %>%
filter(CODIGO_MUNICIPIO==71072) %>%
mutate(Mais_de_10000_votos=case_when(TOTAL_VOTOS>10000~TRUE,
TOTAL_VOTOS<=10000~FALSE))
cands_sp_maior_10000 <- data_prefeito_turno_1 %>% filter(Mais_de_10000_votos==TRUE) %>% nrow()
Existem `r cands_sp_maior_10000` candidatos-zonas com mais de 10000 votos.
Existem 223 candidatos-zonas com mais de 10000 votos.
13. Voltando para os dados orginais, filtrar para os dados dos vereadores. Agora, imagine que não temos os dados do partido de cada candidato e queremos recuperar do NUMERO_CAND, em que os primeiros dois digitos sempre refletem o número do partido do candidato. Divida a coluna NUMERO_CAND em duas para criar uma coluna de NUM_PARTIDO e outra de NUM_CAND_RESTANTE.
data_vereador <- data %>% filter(DESCRICAO_CARGO=="VEREADOR") %>%
separate(NUMERO_CAND, into=c("NUM_PARTIDO","NUM_CAND_RESTANTE"), sep=2)
data_vereador
14. Agora, unifique as colunas NUM_PARTIDO e NUM_CAND_RESTANTE criado em Q9. O resultado deve ser ígual à coluna original NUMERO_CAND.
data_vereador <- data_vereador %>%
unite(NUMERO_CAND_NOVO,c(NUM_PARTIDO,NUM_CAND_RESTANTE))
data_vereador